package org.dromara.easytl.ast;

/**
 * Elvis表达式节点
 * 表示空值合并运算符：value ?: defaultValue
 * 当左侧值为null或空时，返回右侧的默认值
 * 
 * @author EasyTL Team
 */
public class ElvisExpression extends ASTNode {
    
    /** 左侧表达式 */
    private final ASTNode left;
    
    /** 右侧默认值表达式 */
    private final ASTNode right;
    
    /**
     * 构造Elvis表达式节点
     * 
     * @param left 左侧表达式
     * @param right 右侧默认值表达式
     */
    public ElvisExpression(ASTNode left, ASTNode right) {
        this.left = left;
        this.right = right;
    }
    
    /**
     * 获取左侧表达式
     * 
     * @return 左侧表达式
     */
    public ASTNode getLeft() {
        return left;
    }
    
    /**
     * 获取右侧默认值表达式
     * 
     * @return 右侧默认值表达式
     */
    public ASTNode getRight() {
        return right;
    }
    
    @Override
    public <T> T accept(ASTVisitor<T> visitor) {
        return visitor.visitElvisExpression(this);
    }
    
    @Override
    public String toString() {
        return "ElvisExpression{" +
                "left=" + left +
                ", right=" + right +
                '}';
    }
}

